ปัญหาเกี่ยวกับ .find และ Date ภายในแอปพลิเคชัน/อินสแตนซ์ Excel ที่แตกต่างกัน

หวังว่าใครบางคนอาจมีเบาะแสหากมีสิ่งใดที่ฉันสามารถทำได้เพื่อแก้ไขปัญหาที่ฉันมี การเพิ่มโค้ดที่ฉันใช้อาจเป็นเรื่องยากเนื่องจากมีขนาดใหญ่มาก

ฉันมีตารางที่มีวันที่ตามปฏิทินในคอลัมน์แรก ทั้งหมดอยู่ในรูปแบบ วว/ดด/ปปปป ใน VBA ฉันต้องการค้นหาวันที่และค้นหาหมายเลขแถวภายในปฏิทินโดยใช้สิ่งต่อไปนี้

FirstRow = Workbooks(WorkbookSelected.Name).Sheets("Tables").Columns(1).Find(ConfirmedDate, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, LookAt:=xlWhole).Row

วันที่ที่ยืนยันจะถูกจัดเก็บเป็นตัวแปรวันที่ ซึ่งนำมาจากปฏิทินเช่นกัน แต่จะมีวันเพิ่มเข้ามา ฉันกำลังค้นหาในสมุดงานสองเล่มที่แตกต่างกันเพื่อค้นหา FirstRow หากสมุดงานทั้งสองอยู่ในแอปพลิเคชัน/อินสแตนซ์เดียวกันของ Excel โค้ดนี้จะทำงานได้ดี

แต่หากฉันเปิดสมุดงานที่ 2 ในอินสแตนซ์ใหม่ของ Excel มันจะเกิดข้อผิดพลาดเนื่องจากไม่พบวันที่ มีบางอย่างเกิดขึ้นกับวันที่ในแอปพลิเคชันที่ 2 ถ้าฉันใช้ format(ConfirmedDate, "dd/mm/yyyy") มันจะพบมันในสมุดงานเล่มที่ 2 แต่รหัสนั้นจะใช้งานไม่ได้ในสมุดงานต้นฉบับ รหัสที่คล้ายกันกับด้านบน แต่เพียงอ้างอิงอินสแตนซ์ของ Excel ที่ต้องพิจารณา ฉันได้รับ Runtime Error 91 เมื่อไม่พบ

FirstRow = ExcelInstanceSelected.Workbooks(WorkbookSelected.Name).Sheets("Tables").Columns(1).Find(ConfirmedDate, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, LookAt:=xlWhole).Row

FirstRow = ExcelInstanceSelected2.Workbooks(2ndWorkbookSelected.Name).Sheets("Tables").Columns(1).Find(ConfirmedDate, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, LookAt:=xlWhole).Row

ฉันกำลังพยายามหาวิธีค้นหาวันที่ในปฏิทินโดยไม่คำนึงว่าฉันใช้แอปพลิเคชัน Excel ใด ฉันได้ลองเปิดสมุดงานโดยตั้งค่าท้องถิ่นเป็นจริง (ไม่ได้ช่วยอะไร) ฉันได้ลองใช้รูปแบบ cdate, cdbl, lookin:=xlformulas แล้ว ไม่มีอะไรจะใช้ได้กับทั้งสองสมุดงาน

มันทำให้ฉันแทบบ้า ฉันสามารถสรุปได้ว่า .find ในสมุดงานเล่มที่ 2 กำลังเปลี่ยนรูปแบบของ ConfirmedDate ที่เก็บไว้เป็นรูปแบบสหรัฐอเมริกา m/dd/yyyy ฉันหาวิธีให้แน่ใจว่าวันที่ทั้งสองสามารถจัดรูปแบบเป็น dd/mm/yyyy เกี่ยวกับวิธีการเริ่มต้นได้

ขอบคุณมากสำหรับความช่วยเหลือใด ๆ

เซล


person Celeggur    schedule 09.02.2020    source แหล่งที่มา
comment
เหตุใดจึงใช้ Workbooks(WorkbookSelected.Name).Sheets แทนที่จะเป็นเพียง WorkbookSelected.Sheets   -  person K.Dᴀᴠɪs    schedule 09.02.2020
comment
มันเป็นเพียงวิธีที่ฉันเรียนรู้วิธีใช้การดูสมุดงานต่างๆ แน่นอนฉันสามารถเปลี่ยนแปลงได้ แต่นั่นไม่สามารถแก้ไขปัญหานี้ได้ มันคือการค้นหาสมุดงานที่ถูกต้อง   -  person Celeggur    schedule 09.02.2020
comment
ฉันไม่ได้บอกเป็นนัยว่ามันจะแก้ไขปัญหาได้ แค่ไม่สมเหตุสมผลเลย มันเหมือนกับการพูดว่า SUM(1+2) = 3 แทนที่จะเป็น 3 = 3 คุณไม่จำเป็นต้องใช้ฟังก์ชัน (Workbooks()) เพื่อรับวัตถุสมุดงาน เมื่อคุณมีวัตถุสมุดงานอยู่แล้ว   -  person K.Dᴀᴠɪs    schedule 09.02.2020
comment
ฉันขอขอบคุณที่คุณชี้ให้เห็น ฉันจะเปลี่ยนมันภายในรหัสของฉัน   -  person Celeggur    schedule 09.02.2020
comment
คุณไม่จำเป็นต้องเปลี่ยนมันจริงๆ ฉันแค่คิดว่าฉันจะชี้ให้เห็น คุณไม่สามารถเรียนรู้ได้ถ้าเราไม่เคยพูดอะไรเลย :-)   -  person K.Dᴀᴠɪs    schedule 09.02.2020
comment
เป็นสิ่งที่ดีที่จะชี้ให้เห็น มันจะลดขนาดโค้ดของฉันลงอย่างมาก ส่วนหนึ่งของปัญหาในการเรียนรู้ตัวเอง ฉันแน่ใจว่าฉันได้ทำหลายสิ่งหลายอย่างซึ่งไม่ใช่วิธีที่ดีที่สุดในการทำมัน   -  person Celeggur    schedule 09.02.2020
comment
Excel ไม่มีประเภทข้อมูล วันที่ วันที่จะถูกจัดเก็บเป็นหมายเลขลำดับโดยมี 1= 1-Jan-1900 หรือ 1-Jan-1904 VBA มีประเภทข้อมูล วันที่ และการค้นหาวันที่ในแผ่นงาน Excel อาจเป็นเรื่องยาก ดูที่ ช่วง Excel VBAค้นหาวันที่ที่เป็นสูตร   -  person Ron Rosenfeld    schedule 09.02.2020
comment
@K.Davis - สิ่งที่ควรทราบ ฉันพยายามเปลี่ยนวัตถุสมุดงานตามที่คุณแนะนำ แต่น่าเสียดายที่มันใช้งานไม่ได้โดยต้องเลือกแอปพลิเคชัน Excel แต่จะมีประโยชน์ถ้าฉันใช้อินสแตนซ์เดียวเท่านั้น ดังนั้นขอขอบคุณ   -  person Celeggur    schedule 10.02.2020
comment
@ รอน - ฉันทดสอบลูปที่คุณต้องค้นหาวันที่อย่างรวดเร็วในขณะที่ใช้งานได้ แต่ฉันไม่รู้ว่าเป็นสิ่งที่ฉันสามารถใช้ได้ในปัจจุบันหรือไม่ (ช่วงเวลาสั้นเกินกว่าจะแก้ไขโค้ดได้) ฉันยังไม่เข้าใจว่าเหตุใดการค้นหา UK Dates จึงใช้งานได้ในสมุดงานเล่มเดียว แต่วันที่ถูกแปลงเป็นรูปแบบสหรัฐอเมริกาเมื่อค้นหาในแอปพลิเคชันใหม่ ฉันสามารถแก้ไขได้โดยการเปลี่ยนรูปแบบของวันที่ภายในตารางเพื่อไม่ให้เปลี่ยนตามการตั้งค่าภูมิภาค แต่สิ่งนี้จะต้องใส่ format() ลงในแต่ละ .find   -  person Celeggur    schedule 10.02.2020
comment
การค้นหาหมายเลขที่ซ่อนอยู่ใน Excel นั้นค่อนข้างจะเข้าใจผิดได้ ดูเหมือนว่าคุณจะต้องแก้ไขโค้ดของคุณ   -  person Ron Rosenfeld    schedule 10.02.2020