Tag: vba

Excel VBA – 返回切片机中的选定元素

我有一个名为“Slicer_HeaderTitle”的切片机。 我只需要能够使用所选元素的值在VBA中调暗variables。 我一次只能select一个元素。 由于我的数据透视表连接到外部数据源,因此我通过VBAdynamic地select和取消select切片器中的元素有很多问题。 我不知道这是否与这个确切的例子有关,但是这个表连接到相同的外部数据源。 我曾经有一行代码,可以返回这个值,但是我现在可以find的所有代码都需要循环切片器中的每个元素,并检查是否被选中。 我希望避免这一点,因为我一次只有一个选定的元素。 ' This is what I'm trying to achieve. Dim sValue as String sValue = ActiveWorkbook.SlicerCaches("Slicer_HeaderTitle").VisibleSlicerItems.Value msgbox(sValue) 'Returns: "Uge 14 – 2016 (3. Apr – 9. Apr)" 当前状态:

Excel VBA无法在Office 2016中另存为embedded式PowerPoint演示文稿

我们在Excel中embeddedpptx文件,然后使用Excel VBA代码(如下图)打开,然后将pptx文件另存为用户的驱动器,然后根据Excel计算以编程方式修改pptx内容。 下面的Excel VBA代码可以很好地控制PowerPoint 2010和2013,但不再适用于PowerPoint 2016。 注意:我对Word有类似的代码,对于Word 2016(以及之前的版本)来说,它工作正常。 Sub OpenCopyOfEmbeddedPPTFile() 'works with Office 2010 and 2013, but not on Office 2016 Dim oOleObj As OLEObject Dim PPTApp As Object Dim PPTPres As Object Dim sFileName As String Set oOleObj = ActiveSheet.Shapes("PPTObj").OLEFormat.Object 'name of the embedded pptx object Set PPTApp = CreateObject("Powerpoint.Application") PPTApp.Visible = True sFileName […]

如果是最后一个工作簿,closuresexcel?

我有一个打开工作簿的button“SaveClose”。 如果是打开的最后一个工作簿,我希望该button上的事件closures整个Excel应用程序。 事情是,有可能有未知的personal.xlsb打开或任何其他macros打开工作簿是不可见的,我想知道是否有任何其他可行的Excel工作簿打开。 是否有检查不可见的工作簿? 如果这是最后一个工作簿,请closuresexcel应用程序,如果没有closures活动工作簿,这里是我得到的: Sub CloseForceSave() 'Save the workbook. ThisWorkbook.Save 'If this is the only workbook opened in the current session, then… If Workbooks.Count = 1 Then "or Workbooks.Count = 2" to account for personal.xlsb '…quit Excel Application.Quit 'Else… Else '…close the active workbook ThisWorkbook.Close End If End Sub

使用VBA格式化图表数据标签

我正在开发一个有很多图表的仪表板,随着这些图表上显示的数据的变化,数字的格式也会变化。 现在,我遇到了一个问题,试图从数据所基于的电子表格中检索预期的格式代码,在图表中的所有系列中循环。 以下是目前的代码: Sub FixLabels(whichchart As String) Dim cht As Chart Dim i, z As Variant Dim seriesname, seriesfmt As String Dim seriesrng As Range Set cht = Sheets("Dashboard").ChartObjects(whichchart).Chart For i = 1 To cht.SeriesCollection.Count If cht.SeriesCollection(i).name = "#N/D" Then cht.SeriesCollection(i).DataLabels.ShowValue = False Else cht.SeriesCollection(i).DataLabels.ShowValue = True seriesname = cht.SeriesCollection(i).name Debug.Print seriesname 有了这个,我可以检索不会导致错误的de系列的名称,并隐藏所做的系列。 到现在为止还挺好。 现在开始格式化:有一列存储了这个工作簿的所有可能的序列名,左边一列是我的格式化代码,整型数字是“int”,“#,#”是具有重要小数的数字,以及百分比的“%”。 […]

增加数组vba中元素的值

我在Excel的VBA工作,我有一个整数数组。 我想要做的是当我的条件已满足时,将1添加到数组内的特定元素。 在我的示例代码中,如果列A中的单元格是5,那么我想在数组的第5个位置添加1,或者如果单元格是3,那么将1添加到数组的第3个位置。 Sub CountCustomers() Dim myArray(5) Dim i as integer For i = 1 to 10 If Cells(i,1) = 5 Then myArray(4) = myArray(4)+1 ElseIf Cells(i,1) = 3 Then myArray(2) = myArray(2)+1 End If Next End Sub 当我这样运行时,它会以正确的位置结束1,但不会增加任何更高的值。 有没有办法做到这一点?

VBA如何快速复制单元格的公式和格式?

[最新发现]我发现value(11)有时可以复制公式 ,但并不总是。 像sumproduct和sumif这样的公式不能被复制,但是可以复制简单的算术运算。 这太奇怪了! 我仍然无法弄清楚为什么。 我知道,如果我只想复制值,最快的方法是 Range("A1").Value = Range("A2").Value 如果我想复制格式和值,最快的方法是 Range("A1").Value(11) = Range("A2").Value(11) 如果我想复制公式,最快的方法是 Range("A1").Formula = Range("A2").Formula 如果我想复制公式和格式呢? (我在这个单元格中有很多格式,比如条件格式,粗体,下划线,alignment方式,数字显示格式,边框样式等等,所以一次一个地转换每个样式是不实际的。

设置variablesVBA

在这里完成新手 我几天前开始了一些VBA,我有一个简单的问题,但似乎找不到我做错了什么。 我试图做一个button,将采取活动单元格的坐标,并将它们与另一个工作表来检索另一个表中的特定值。 我将variables设置为活动单元格列和行,我想要这样做,以便稍后可以将这些位置与另一个工作表进行比较,并获取另一个工作表上的指定位置的值。 到目前为止,我没有正式的培训,所以只写了一些我在互联网上可以find的东西。 在最后的msgbox只是为了testing它是否真的拿起参考。 Sub CommandButton1_Click() Dim Arow As Range Dim Acol As Range Set Arow = Worksheets("Sheet1").Range(ActiveCell.Row) Set Acol = Worksheets("Sheet1").Range(ActiveCell.Column) MsgBox (Arow) End Sub 到目前为止,我有错误运行时错误'1004'应用程序定义或对象定义的错误突出显示第四行。 如果有人可以帮我解决这个问题或redirect我一些帮助,将不胜感激。

VBA cDate不适用于Mac excel 2011(14.7.1)

我正在尝试使用VBA脚本将date转换为长。 以下是代码片段 Sub test() Dim str as string Dim d as variant str="1/1/2016" d=cdate(str) end sub 上面的代码片段在Windows上运行良好,但给我MACtypes不匹配错误。 是否有任何转换在date转换有效的string。

VBA用variables打开另一个工作簿和工作表

我还找不到答案: 我有一个单元格A2单元格中的客户名称和单元格B2中的产品代码。 我有一个文件位置“C:\用户\接待\文件\共享\项目主数据\客户BOMS \”与工作簿为每个客户。 在这些工作簿中,每个产品代码都有一个制表符以制作产品。 我需要做的是告诉macros打开单元格A2中的特定客户的工作簿,然后转到单元格B2中的选项卡。 我已经能够打开工作簿,但不能打开工作表。 这是我的代码: Range("A2").Select Dim CName As String Dim PCode As String Dim BOM As Workbook Dim ws As Worksheet CName = ActiveCell.Value PCode = ActiveCell.Offset(0, 1).Value Set BOM = Workbooks.Open("C:\Users\Reception\Documents\Shared\Item Master Data\Customer BOMS\" & CName & ".xlsm") Set ws = BOM.Sheets(Range(PCode))

Excel VBA – 复制前检查范围内的数据是否已经存在

我有一个excel文件,几张。 在一张“Daily Tracker”上,我在页面上有一些数据,在我的代码中,我将这个范围标记为“DailyTable”,其中包含我想要复制的数据。 一旦数据完全填充一周,我想有几件事情发生。 “DailyTable”中的数据复制到最后一行数据下的“每日备份”中。 [我有这个工作] 在“DailyTable”被复制之前,它会检查重复数据[防止多次按下备份macros,并且重复数据。] 如果数据是重复的,通知让用户知道他们已经支持了这个星期的数据。 我将有另外一个脚本来清除数据,将#号加1。当我之前testing这个过程时,你会看到一些inputvariables。 如果有更好的方法来做这件事,就会喜欢听到的想法。 我的第一个VBA脚本(请指出任何效率低下或者可能更好的做法,我很乐意学习如何以及为什么工作): Sub BackupTable() Dim DailyWS As Worksheet Dim DailyTable As Range Dim BackupWS As Worksheet Dim NewTable As Range Dim Week As Range Dim WeekBackup As Range Dim WeekCurrent As String Dim WeekNext As String Dim NextRow As Long Set BackupWS = Worksheets("Daily Backup") Set […]