ฉันจะใช้ FileSystemObject ใน VBA ได้อย่างไร


113

มีบางสิ่งที่ฉันต้องการอ้างอิงหรือไม่? ฉันจะใช้สิ่งนี้ได้อย่างไร:

Dim fso As New FileSystemObject
Dim fld As Folder
Dim ts As TextStream

ฉันได้รับข้อผิดพลาดเนื่องจากไม่รู้จักวัตถุเหล่านี้

คำตอบ:


178

ภายใน Excel คุณต้องตั้งค่าการอ้างอิงไปยังไลบรารีรันไทม์ของสคริปต์ VB ไฟล์ที่เกี่ยวข้องมักจะอยู่ที่\Windows\System32\scrrun.dll

  • หากต้องการอ้างอิงไฟล์นี้ให้โหลด Visual Basic Editor ( ALT+ F11)
  • เลือกเครื่องมือ> การอ้างอิงจากเมนูแบบเลื่อนลง
  • กล่องรายการข้อมูลอ้างอิงที่มีจะปรากฏขึ้น
  • เลือกช่องทำเครื่องหมายถัดจาก ' Microsoft Scripting Runtime'
  • ชื่อเต็มและเส้นทางของscrrun.dllไฟล์จะแสดงใต้กล่องรายการ
  • คลิกที่OKปุ่ม

นอกจากนี้ยังสามารถทำได้โดยตรงในรหัสหากเปิดใช้งานการเข้าถึงโมเดลวัตถุ VBA

สามารถเปิดใช้งานการเข้าถึงได้โดยทำเครื่องหมายในช่องทำเครื่องหมายTrust access to the VBA project object modelที่File> Options> Trust Center> Trust Center Settings> Macro Settings

การตั้งค่า VBA Macro

ในการเพิ่มข้อมูลอ้างอิง:

Sub Add_Reference()

    Application.VBE.ActiveVBProject.References.AddFromFile "C:\Windows\System32\scrrun.dll"
'Add a reference

End Sub

ในการลบข้อมูลอ้างอิง:

Sub Remove_Reference()

Dim oReference As Object

    Set oReference = Application.VBE.ActiveVBProject.References.Item("Scripting")

    Application.VBE.ActiveVBProject.References.Remove oReference
'Remove a reference

End Sub

คุณทำอะไรบน Mac?
Thomas Fankhauser

ไม่มีวิธีทำผ่านบรรทัดคำสั่งเช่นเดียวกับไลบรารีหรืออะไร?
LuizAngioletti

มีวิธี AUTO ให้ติ๊กช่องทำเครื่องหมาย 'Microsoft Scripting Runtime' หรือไม่? สำหรับไฟล์ Excel ทั้งหมดหรือไม่ ฉันใช้ Excel 2016
compski

ดูคำตอบที่ยอมรับสำหรับคำถามนี้ stackoverflow.com/questions/9879825/…
Robert Mearns

14

ใน excel 2013 สตริงการสร้างวัตถุคือ:

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")

แทนรหัสในคำตอบด้านบน:

Dim fs,fname
Set fs=Server.CreateObject("Scripting.FileSystemObject")

เพื่อให้ชัดเจนขึ้นเล็กน้อยฉันมักจะเห็นเป็นDim fso As Object
Marcucciboy2

12

คนเหล่านี้มีตัวอย่างที่ดีเยี่ยมในการใช้อ็อบเจ็กต์ระบบไฟล์http://www.w3schools.com/asp/asp_ref_filesystem.asp

<%
dim fs,fname
set fs=Server.CreateObject("Scripting.FileSystemObject")
set fname=fs.CreateTextFile("c:\test.txt",true)
fname.WriteLine("Hello World!")
fname.Close
set fname=nothing
set fs=nothing
%> 

4
ข้อมูลโค้ดนี้แสดงให้เห็นถึงการใช้ FSO ใน ASP / IIS ไม่ใช่ excel
Spangen


2

หลังจากนำเข้ารันไทม์สคริปต์ตามที่อธิบายไว้ข้างต้นคุณต้องทำการแก้ไขเล็กน้อยเพื่อให้มันทำงานใน Excel 2010 (เวอร์ชันของฉัน) ในรหัสต่อไปนี้ฉันได้เพิ่มรหัสที่ใช้สำหรับผู้ใช้เพื่อเลือกไฟล์

Dim intChoice As Integer
Dim strPath As String

' Select one file
Application.FileDialog(msoFileDialogOpen).AllowMultiSelect = False

' Show the selection window
intChoice = Application.FileDialog(msoFileDialogOpen).Show

' Get back the user option
If intChoice <> 0 Then
    strPath = Application.FileDialog(msoFileDialogOpen).SelectedItems(1)
Else
    Exit Sub
End If

Dim FSO As New Scripting.FileSystemObject
Dim fsoStream As Scripting.TextStream
Dim strLine As String

Set fsoStream = FSO.OpenTextFile(strPath)

Do Until fsoStream.AtEndOfStream = True
    strLine = fsoStream.ReadLine
    ' ... do your work ...
Loop

fsoStream.Close
Set FSO = Nothing

หวังว่ามันจะช่วยได้!

ขอแสดงความนับถืออย่างสูง

ฟาบิโอ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.