2013-09-25 21 views
0

這是一個很好的例子。首先我開始學習VBA,所以要溫柔。所以我在EXCEL 2007中有這個vba宏,根據用戶在3個下拉菜單中的選擇自動隱藏/顯示錶中的行。僅供參考,該表根據主表自動更新主表,其中包含所有可能的選擇,根據用戶的選擇隱藏不需要的行。

現在我想把它帶到另一個層面。我想要的是能夠從WORD 2007中調用宏,以便將表格複製到所需位置的單詞文檔。爲了達到這個目的,下拉菜單需要放在word文檔中,EXCEL宏必須從word文檔中「讀取」選定的值來構建表格。換句話說,用戶將永遠不會看到EXCEL部分,並根據他從下拉菜單中選擇的內容在他的word文檔中獲取表格。

我插入了建立表格的excel宏。最終的結果會是這樣從詞,C1,C2和C3,這是推動IF語句中的變量,將變量下拉菜單從Word中調用VBA excel宏來粘貼一個表,根據word中的下拉列表進行更新

Sub Sequence() 

    Application.ScreenUpdating = False 

    ActiveSheet.Cells.EntireRow.Hidden = False 

    If Range("C2").Value = 2 Then 
     Rows("48:67").Hidden = True 
    Else 
     Rows("48:67").Hidden = False 
    End If 

    If Range("C3").Value = 2 Then 
     Rows("6:7").Hidden = True 
    Else 
     Rows("6:7").Hidden = False 
    End If 

    If Range("C1").Value = 1 Then 

     Rows("9:12").Hidden = True 
     Rows("14:17").Hidden = True 
     Rows("19:22").Hidden = True 
     Rows("24:27").Hidden = True 
     Rows("29:47").Hidden = True 
     Rows("48:51").Hidden = True 
     Rows("53:56").Hidden = True 
     Rows("58:61").Hidden = True 
     Rows("63:66").Hidden = True 

     j = 1 
     k = -2 

     For i = 6 To 67 
      If Rows(i).Hidden = False Then 

       Range("A" & i) = j 
       j = j + 1 
       Range("B" & i) = k 
       k = k + 1 
      End If 

     Next i 

    End If 

    If Range("C1").Value = 2 Then 

     Rows("9").Hidden = True 
     Rows("11").Hidden = True 
     Rows("13").Hidden = True 
     Rows("15").Hidden = True 
     Rows("17").Hidden = True 
     Rows("19").Hidden = True 
     Rows("21").Hidden = True 
     Rows("23").Hidden = True 
     Rows("25").Hidden = True 
     Rows("27").Hidden = True 
     Rows("29:31").Hidden = True 
     Rows("33:35").Hidden = True 
     Rows("37:39").Hidden = True 
     Rows("41:43").Hidden = True 
     Rows("45:47").Hidden = True 
     Rows("48:51").Hidden = True 
     Rows("53:56").Hidden = True 
     Rows("58:61").Hidden = True 
     Rows("63:66").Hidden = True 

     j = 1 
     k = -2 

     For i = 6 To 67 
      If Rows(i).Hidden = False Then 

       Range("A" & i) = j 
       j = j + 1 
       Range("B" & i) = k 
       k = k + 1 
      End If 

     Next i 

    End If 

    If Range("C1").Value = 3 Then 

     Rows("9").Hidden = True 
     Rows("11").Hidden = True 
     Rows("13").Hidden = True 
     Rows("15").Hidden = True 
     Rows("17").Hidden = True 
     Rows("19").Hidden = True 
     Rows("21").Hidden = True 
     Rows("23").Hidden = True 
     Rows("25").Hidden = True 
     Rows("27").Hidden = True 
     Rows("29").Hidden = True 
     Rows("31").Hidden = True 
     Rows("33").Hidden = True 
     Rows("35").Hidden = True 
     Rows("37").Hidden = True 
     Rows("39").Hidden = True 
     Rows("41").Hidden = True 
     Rows("43").Hidden = True 
     Rows("45").Hidden = True 
     Rows("47").Hidden = True 
     Rows("48:50").Hidden = True 
     Rows("52:54").Hidden = True 
     Rows("56:58").Hidden = True 
     Rows("60:62").Hidden = True 
     Rows("64:66").Hidden = True 

     j = 1 
     k = -2 

     For i = 6 To 67 
      If Rows(i).Hidden = False Then 

       Range("A" & i) = j 
       j = j + 1 
       Range("B" & i) = k 
       k = k + 1 
      End If 

     Next i 

    End If 

    If Range("C1").Value = 4 Then 

     j = 1 
     k = -2 

     For i = 6 To 67 
      If Rows(i).Hidden = False Then 

       Range("A" & i) = j 
       j = j + 1 
       Range("B" & i) = k 
       k = k + 1 
      End If 

     Next i 

    End If 

    Range("A5:D67").Copy 

    Application.ScreenUpdating = True 

    End Sub 
+1

兩個建議。首先,這裏沒有人會介意閱讀你的代碼。二,把你的問題分成幾段 - 我不清楚你在問什麼。 – enderland

回答

0

你的意思是你要調用宏Word中的Excel? 它就是這樣的情況下,您可以在Word中做到這一點:

Sub excel() 
    Dim excel As Object 
    Dim wb As Object 
    Dim str As String 
    Set excel = CreateObject("Excel.Application") 
    Set wb = excel.workbooks.Open("D:\Profiles\scklam\Desktop\Book2.xls") 
    'Run the macro you want 
    excel.Run "test2" 
    str = wb.sheets(1).Range("A1") 
    Selection.TypeText (str) 
    wb.Save 
    wb.Close 
    Set wb = Nothing 
    Set excel = Nothing 
End Sub 

在這個例子中,我做我的Excel中的東西,然後一個單元格的值複製回Word。

+0

非常感謝您的回答。這是我嘗試做的一部分但是,我仍然需要能夠從WORD中的下拉菜單中進行選擇。根據從WORD下拉菜單中選擇的值,EXCEL會識別出該選項,Excel中的表格將被更新,然後複製到word文檔中。謝謝! – user2816486

+0

如果你想傳遞一個參數到excel,你可以使用 'excel.Run「test2」,arg' 你在excel中的子程序應該帶一個參數 – sam092

相關問題