2016-12-27 247 views
0

我是Excel宏中的新成员,并且没有使用VB或任何语言的经验。使用宏和其他表格的值将Excel工作表导出为PDF

我有一个价目表片,在此我们有一个字段与我们的销售人员的联系方式(邮件和手机)的下拉列表。

第二片包含具有名称和的ContactInfo的表。

今天,我使用下拉菜单选择的业务员,并出口到PDF到指定的目录。

我期待用宏做这些事情导出为PDF格式。我试过一些宏而没有成功。我想使用名称@Name保存在目录中,并使用@ContactInfo替换价目表的特定字段。

我有:

Sub MAKEPDF() 
Dim dvCell As Range 
Dim inputRange As Range 
Dim c As Range 
Dim i As Long 


'Which cell has data validation 
Set dvCell = Sheets("NUEVA LISTA").Range("A3") 
'Determine where validation comes from 
Set inputRange = Evaluate(dvCell.Validation.Formula1) 

arrVendedores = Array("Name1", "Name2", "Name3", "Name4", "Name5", "Name6", "Name7") 

i = 1 
'Begin our loop 
Application.ScreenUpdating = False 
For Each c In inputRange 
    dvCell = c.Value 

     ChDir "D:\Google Drive\Lista de Precios\temp\" & arrVendedores(i) 

     ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:="(" & Format(Range("A4"), "yyyy-mm-dd") & ") Lista de precios.pdf" 

     'Quality:=xlQualityStandard, _ 
     IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True 

    i = i + 1 
Next c 
Application.ScreenUpdating = True 
End Sub 

这保存为PDF完美,但如预期导致错误9(索引),阵列不工作,为更好地从表1 @名称使用当前数据。

任何人都可以帮助我达成目标吗?

感谢和抱歉我的英语不好。

+0

应该不是你的阵列中使用I = 0来迭代?如arrVenderoes默认情况下(0到6)不是(1到7)。你可以在编辑器的本地窗口中检查它。 –

+0

这可能是一个想法来代替I = 1,并像对于i = LBOUND(arrVendedores)为UBound函数(arrVendedores)在我的迭代,如果你改变你是安全的阵列的方式。然后你可以使用你提到的表格更早地设置数组。 –

+0

我试图用我+ 1里面arrVendedores但失败,并且....我应该使用其他变量一样II =然后我用II + 1里面arrVendedores – Chiar15

回答

0

我发现很难不看到一些输入编辑你的代码,但我得到这个与一些虚拟数据虽然流动。

Sub MAKEPDF() 
    Dim dvCell As Range 
    Dim inputRange As Range 
    Dim c As Range 
    Dim i As Long 

    Application.ScreenUpdating = False 
    'Which cell has data validation 
    Set dvCell = Sheets("NUEVA LISTA").Range("A3") 
'You assigned the value of this cell later on but didn't use it so I removed the value assignment below. 
    'Determine where validation comes from 
    Set inputRange = Evaluate(dvCell.Validation.Formula1) 

    arrVendedores = Array("Name1", "Name2", "Name3", "Name4", "Name5", "Name6", "Name7") 
    'you might want to assign this in code, not sure if it is the sheet names but I assumed it is if not and just filenames to use. 

    For i = LBound(arrVendedores) To UBound(arrVendedores) 
    'this allows an array of any size to be iterated over with having to change the code. 
      ChDir "D:\Google Drive\Lista de Precios\temp\" & arrVendedores(i) 

      Worksheets(arrVendedores(i)).ExportAsFixedFormat Type:=xlTypePDF, Filename:="(" & Format(Range("A4"), "yyyy-mm-dd") & ") Lista de precios.pdf" 
    'you had activeworksheet here but it didn't seem to be changing, so if I assume the array is sheet names this will export those sheet else you will need to change to suit. 
      'Quality:=xlQualityStandard, _ 
      IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True 

    Next 

    Application.ScreenUpdating = True 
    End Sub 
+0

谢谢队长我用你的意见重建我的宏 – Chiar15

0

谢谢队长,根据您的回答我犯了一个新的宏如下

Sub MakePDF4() 

Dim myTable As ListObject 
Dim myArray As Variant 
Dim x As Long 
Dim vendedorDatos As Range 
Dim vendedorCampoDatos As Range 



    Set myTable = Sheets("VENDEDORES").ListObjects("Table1") 


    myArray = myTable.DataBodyRange 


    For x = LBound(myArray) To UBound(myArray) 

     Application.ScreenUpdating = False 

     Set vendedorCampoDatos = (Sheets("NUEVA LISTA").Range("A3")) 
     vendedorCampoDatos = myArray(x, 2) 

     'ChDir "D:\Google Drive\Lista de Precios\temp\" & myArray(x, 1) 

     ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:="D:\Google Drive\Lista de Precios\temp\" & myArray(x, 1) & "\(" & Format(Range("A4"), "yyyy-mm-dd") & ") Lista de precios.pdf" 

       'Quality:=xlQualityStandard, _ 
       IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True 

    Next x 

Application.ScreenUpdating = True 
End Sub 

它正常工作。我在设置ChDir时遇到了一些问题,但在设置文件名时工作。

的所有数据是在一个唯一的文件(可能是我拼写错误或在解释混淆某些字)。一个工作表是价目表,第二个工作表包含销售员的[@Name]和[@ContactInfo]表。

我用[@Name]以定在哪个目录,我将保存的PDF文件和[@ContactInfo]在价格表的工作表独特的现场销售人员之间改变