2016-12-19 11 views
0

Excel VBEで3つの異なる機能を組み合わせたり、ネストしたりしようとしています。私はそれらを別々に書いてもらいましたが、それらを組み合わせる方法は不明です。私は "マクロを呼び出す"機能を試しましたが、コンパイルエラーが返されました。Excelでのマクロの結合

目的は、特定のフォルダ内に多数のファイルを開き、それらすべてのURLをクリックすることです(URLは必ずしも同じではないので、シート内の未知のURLを対象とするクリック機能が必要です)。

オープンマクロ:

Sub openMyfile() 

Dim Source As String 
Dim StrFile As String 

Source = "https://stackoverflow.com/users/kmogilevsky/Desktop/IC_new/" 
StrFile = Dir("https://stackoverflow.com/users/kmogilevsky/Desktop/IC_new/") 

Do While Len(StrFile) > 0 
    Workbooks.Open Filename:=Source & StrFile 
    StrFile = Dir("https://stackoverflow.com/users/kmogilevsky/Desktop/IC_new/") 
Loop 
End Sub 

ループマクロ:それはあなたのニーズに合っよう

Sub LoopThroughFiles() 
    Dim MyObj As Object, MySource As Object, file As Variant 
    Set MySource = MyObj.GetFolder("https://stackoverflow.com/users/kmogilevsky/Desktop/IC_new/") 
    For Each file In MySource.Files 
     If InStr(file.Name, "test") > 0 Then 
      End If 
    Next file 
End Sub 


    Click macro (this needs some work): 

    Private Sub CommandButton1_Click() 
    Call NewSub 
    End Sub 
+1

ようこそ。非常に似たようなことをやっている手続きのコピーがいくつかあるので、現時点であなたを助けるのは難しいです。あなたがファイルをループする方法の一例と、各ファイルに* URLが格納されている場所*を知る方法をあなたの投稿を編集した場合、私たちはあなたを助けることができます。完全に動作するコードである必要はありませんが、動作していない場所を教えてください。 –

+0

'Sub'や' function'文の後に与えている名前でマクロを呼び出さなければなりません。たとえば、 'NewSub'を呼び出すのが分かりますが、そのコードは表示されません。おそらくあなたは 'Call openMyfile'を打つことを意図しましたか? – Sgdva

+0

Excelファイルを開くか、他のファイルタイプを使用していますか?どの種類のハイパーリンクがファイル内にあるか(挿入>>ハイパーリンクまたはHYPERLINK()式)ファイルごとに複数のリンクが存在するのですか? –

答えて

0
Sub ReadWorkbooksInCurrentFolder() 
    Dim wbDst As Workbook 
    Dim wbSrc As Workbook 
    Dim MyPath As String 
    Dim strFilename As String 

    'Stop annoying popups while macro is running 
    Application.DisplayAlerts = False 
    Application.EnableEvents = False 
    Application.ScreenUpdating = False 

    'When working with many open workbooks its good to explicitly reference all workbooks, makes sure your code works and easier to read, understand and remember which workbook is which. 
    Set wbDst = ThisWorkbook 

    srcSheetName = "Data" 
    dstSheetName = "Results" 

    'I want to loop through all .xlsx files in the folder 
    MyPath = ThisWorkbook.Path 
    strFilename = Dir(MyPath & "\*.xlsx", vbNormal) 

    If Len(strFilename) = 0 Then 
     MsgBox "No workbooks found ending in .xlsx in current folder" 
     Exit Sub 
    End If 

    Do Until strFilename = "" 

     Set wbSrc = Workbooks.Open(Filename:=MyPath & "\" & strFilename) 
     Call CollectData(wbDst, wbSrc, dstSheetName, srcSheetName) 
     wbSrc.Close 

     strFilename = Dir() 

    Loop 


    Application.DisplayAlerts = True 
    Application.EnableEvents = True 
    Application.ScreenUpdating = True 

End Sub 

Sub CollectData(ByRef wbDst as Workbook, ByRef wbSrc as Workbook, dstSheetName as String, srcSheetName as String) 

    'Copy cell A1 contents in source workbook to destination workbook cell A1 
    wbDst.Sheets(dstSheetName).Range("A1") = wbSrc.Sheets(srcSheetName).Range("A1") 

End Sub 

すなわちクリック/ URLのオープンを行い、サブルーチンCollectDataを()を編集してください。 (私はExcelからURLを開くことに慣れていませんが、頻繁にブックをループします)

0

このコードは、デスクトップのIC_Newフォルダ内のすべてのExcelファイルを開きます。
次に、各シートを見て、シート上のハイパーリンクをたどります。

+0

ありがとう!心から感謝する –