Excel / VBA - ดึงข้อมูลจากสมุดงานที่ปิด

[Excel-VBA] อ่านในสมุดงานที่ปิด

มีหลายวิธีภายใต้ VBA เพื่ออ่านข้อมูลจากสมุดงาน Excel โดยไม่ต้องเปิดในภายหลัง วิธีการเหล่านี้ส่วนใหญ่เป็นที่รู้จักกันดีในเรื่องความซับซ้อน แต่มีเคล็ดลับเล็กน้อยในการหลีกเลี่ยงปัญหานี้โดยไม่ต้องใช้การเชื่อมต่อ OLE DB (โหมดอ่านอย่างเดียว)

บทนำ

เราจะพยายามดึงข้อมูลไปยังสมุดงาน "สรุป" ของเรา ข้อมูลอยู่ในช่วงของเซลล์ "A1: F10" ของสมุดงาน "Sheet1" จาก "แหล่งที่มา" ต่อไป นี้อยู่ในไดเรกทอรี "C: \ Pijaku \ Ne_fait_rien_de_ses_journées \ CCM \"

  • ก่อนเปิดสมุดงานและป้อน "Pijaku" ใน Sheet1 จากเซลล์ A1 ถึงเซลล์ F10 และบันทึกเป็น "source.xls" ใน "C: \ Pijaku \ Ne_fait_rien_de_ses_journées \ CCM \"
  • ให้เราปิดสมุดงานนี้
  • เปิดสมุดงานที่สองและบันทึกเป็น " Recap.xls " (บนเดสก์ท็อป)

วิธีการโดย Excel:

ในสมุดงาน Recap.xls ของคุณ:

ใส่ชื่อที่กำหนดไว้

  • เมนู: ใส่
  • ตัวเลือก: ชื่อ
  • คลิกที่: ตั้ง
  • ชื่อในสมุดงาน => type: range
  • หมายถึง => Enter = 'C: \ Pijaku \ Ne_fait_rien_de_ses_journées \ CCM \ [source.xls] Feuil1'! $ A $ 1: $ F $ 10
  • คลิกที่เพิ่ม
  • ในสมุดงานของคุณป้อนสูตรในช่วง A1: =
  • และตรวจสอบ
  • ยืดสูตรนี้จาก A1 ถึง F10 ...

รหัส VBA

 ผู้นำเข้ารายย่อย DonneesSOOuvrir ()

Dim Chemin As String, Fichier As String

Chemin = "C: \ Pijaku \ Ne_fait_rien_de_ses_journées \ CCM \"

Fichier = "source.xls"

ThisWorkbook.Names.Add "plage", _

RefersTo: = "= '" & Chemin & "[" & Fichier & "] Feuil1'! $ A $ 1: $ F $ 10"

ด้วยผ้าปูที่นอน ("Feuil2")

. [A1: F10] = "= ทุ่งหญ้า"

. [A1: F10] .Copy

แผ่นงาน ("Feuil1") ช่วง ("A1") PasteSpecial พิเศษ xlPasteValues

. [A1: F10] .Clear

จบด้วย

ส่วนท้าย

สังเกตได้ว่า

เหนือสิ่งอื่นใดตรวจสอบให้แน่ใจว่าเส้นทางไปยังไดเรกทอรีการสะกดมีความเกี่ยวข้องกัน ตรวจสอบด้วยว่า "\" มีอยู่ระหว่างเส้นทางไดเรกทอรีและชื่อของสมุดงาน

ตัวอย่างการใช้งาน

รหัสนี้จะวนสมุดงานทั้งหมดในไดเรกทอรีและแยกเนื้อหาของเซลล์ A1 (แผ่นที่ 1) ในกรณีนี้เช่นวันที่

 ตัวเลือกที่ชัดเจน

วันผู้นำเข้าย่อย ()

Dim objShell As Object, objFolder As Object

Dim Chemin As String, fichier As String

ตั้งค่า objShell = CreateObject ("Shell.Application")

ตั้งค่า objFolder = objShell.BrowseForFolder (& H0 &, "Choisir un répertoire", & H1 &)

ถ้า objFolder ไม่มีอะไรแล้ว

MsgBox "ละทิ้งopérateur", vbCritical, "Annulation"

อื่น

คอลัมน์ (1) .NumberFormat = "m / d / yyyy"

Chemin = objFolder.ParentFolder.ParseName (objFolder.Title) .Path & "\"

[B1] = Chemin

fichier = Dir (Chemin & "* .xls")

ทำในขณะที่เลน (fichier)> 0

ถ้า fichier ThisWorkbook.Name แล้ว

ThisWorkbook.Names.Add "Plage", _

RefersTo: = "= '" & Chemin & "[" & fichier & "] Feuil1'! $ A $ 1"

ด้วยผ้าปูที่นอน ("Feuil2")

. [A1] = "= Plage"

. [A1] .Copy

แผ่นงาน ("Feuil1") ช่วง ("A" และแถวจำนวน). สิ้นสุด (xlUp) .Offset (1, 0) .PasteSpecial xlPasteValues

แผ่นงาน ("Feuil1"). ช่วง ("A" & Rows.Count) .End (xlUp) .Offset (0, 1) = fichier

จบด้วย

สิ้นสุดถ้า

fichier = Dir ()

ห่วง

สิ้นสุดถ้า

ส่วนท้าย

ดาวน์โหลด

คุณสามารถดาวน์โหลด:

  • สมุดงานต้นฉบับ
  • สรุปสมุดงาน
  • ยังสามารถดาวน์โหลดไฟล์ Zip ที่แสดงการวนซ้ำได้อีกด้วย
บทความก่อนหน้านี้ บทความถัดไป

เคล็ดลับยอดนิยม