我正在尝试定义自己的数据类型并将其作为值放在Dictionary中.VBA抱怨它不接受我的数据类型.关于如何使这个工作的任何想法?
Option Explicit
Public Type Translation
german As String
french As String
italian As String
End Type
Private resource As Object
Public Sub addTranslation(key As String, g As String, f As String, i As String)
Dim trx As Translation
trx.german = g
trx.french = f
trx.italian = i
resource.add key, trx '<== here VBA is complaining
End Sub
Public Sub initResource()
If resource Is Nothing Then Set resource = CreateObject("scripting.dictionary")
End Sub
Run Code Online (Sandbox Code Playgroud)
这是错误消息:
只有在公共对象模块中定义的用户定义类型才能被强制转换为变体或从变量强制转移或传递给后期绑定模块.
在早期版本的Excel中,在工作表中按CTRL + A将逐字地选择所有单元格.在Excel 2010中(不确定2007或2003),我注意到如果在包含值的单元格块中按CTRL + A,似乎只知道选择该块中的单元格.例如,如果范围A1:D10中的所有单元格都包含值,并且当活动单元格在该范围内时您按CTRL + A,则它将仅选择A1:D10.如果再次按CTRL + A,它将实际选择工作表中的所有单元格.
所以我记录了一个宏来查看我执行此操作时生成的宏代码,但实际上Range("A1:D10").Select当我按下CTRL + A时它会写入.这是限制性的而不是动态的,因为现在我必须编写自己的逻辑来确定活动单元格周围的边界.对于像这样的方法来说并不困难ActiveCell.End(xlDown),但我不想在这里重新发明轮子.
有一些Excel VBA方法ActiveCell.GetOuterRange.Select吗?那样就好了.
我需要使用Excel 2010和SQL Server创建动态报告.与以前的其他人创建的一样,我想出了如何创建数据连接并在连接属性定义选项卡中将存储过程与特定参数一起使用.其他报告?在命令定义中使用a并使用工作簿中的单元格来定义参数.
我该怎么做?
创建连接/报告/参数选择的具体步骤或任何帮助非常感谢.
使用2010 Excel VBA - 我只是想通过sub打开一个文件夹.我在这做错了什么?
VBA
Sub openFolder()
Dim preFolder As String, theFolder As String, fullPath as String
theFolder = Left(Range("T12").Value, 8)
preFolder = Left(Range("T12").Value, 5) & "xxx"
fullPath = "P:\Engineering\031 Electronic Job Folders\" & preFolder & "\" & theFolder
Shell(theFolder, "P:\Engineering\031 Electronic Job Folders\" & preFolder, vbNormalFocus)
End Sub
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用VBA从SharePoint打开Excel文件.因为每次运行宏时我正在查找的文件可能不同,所以我希望能够查看SharePoint文件夹并选择我需要的文件.
当我想在网络驱动器上查找文件时,下面的代码工作正常,但是当我用SharePoint地址替换它时,我得到"运行时错误76:找不到路径".
Sub Update_monthly_summary()
Dim SummaryWB As Workbook
Dim SummaryFileName As Variant
ChDir "http://sharepoint/my/file/path"
SummaryFileName = Application.GetOpenFilename("Excel-files,*.xls", _
1, "Select monthly summary file", , False)
If SummaryFileName = False Then Exit Sub
Set SummaryWB = Workbooks.Open(SummaryFileName)
End Sub
Run Code Online (Sandbox Code Playgroud)
当我将此地址粘贴到Windows资源管理器中时,我访问SharePoint文件夹没有问题,所以我知道路径是正确的.
为什么VBA不喜欢它?
情况:使用来自oracle的数据创建Excel 2010工作簿.创建数据连接以实现此目的.然后将excel工作簿另存为.xls文件,以便具有旧版Office的客户可以访问它.
问题:打开工作簿时会显示警告消息:
'安全警告数据连接已被禁用[启用内容]'.
我们认为这是显示的,因为数据连接仍然存在于工作簿中.您可以转到Data-> Connections并将其删除,但是当保存并重新打开工作簿时,数据连接已经返回(尽管具有空的定义字段).
事情尝试:使用宏删除所有数据连接:没有快乐.这里描述的"名称管理器"方法(http://www.mrexcel.com/forum/showthread.php?t=467938):没有快乐.
有没有人见过这种行为?
我想弄清楚一个奇怪的情况.
我有一张有很多床单的工作簿.在一张纸上,我有一个ActiveX列表框(CTOverview.Listbox1).在第二张纸上,我总共有三个列表框(CTSelected.Listbox1到列表框3).我正在使用查询在两个工作表上填充具有相同数据的Listbox1.代码如下:
strSQL = "Select Distinct [Region] From [UniqueCTList$] Order by [Region]"
closeRS
OpenDB
' initialize listboxes
CTSelect.ListBox1.Clear
CTSelect.ListBox2.Clear
CTSelect.ListBox3.Clear
CTOverview.ListBox1.Clear
' initialize with entire division value
CTSelect.ListBox1.AddItem "Entire Division"
CTOverview.ListBox1.AddItem "Entire Division"
' initialize selected Tech
CTData.Range("CT_Selected") = ""
' populate listboxes using recordset
rs.Open strSQL, cnn, adOpenKeyset, adLockOptimistic
If rs.RecordCount > 0 Then
Do While Not rs.EOF
CTOverview.ListBox1.AddItem rs.Fields(0)
CTSelect.ListBox1.AddItem rs.Fields(0)
rs.MoveNext
Loop
Else
MsgBox "I was not able to find any unique Regions.", vbCritical + vbOKOnly
Exit …Run Code Online (Sandbox Code Playgroud) 我正在使用Excel 2010并希望管理大型Excel文件.
所以我想从Windows资源管理器中打开每个文件时打开一个新的Excel实例.此时,所有文件都在同一个Excel实例中打开.
非常感谢任何帮助.
约翰.
[我会这样:http://www.online-tech-tips.com/ms-office-tips/how-to-open-a-new-instance-of-excel-2007-workbooks/ ]
我想我遇到了"最简单的答案是最难找到的答案"的案例,而且我没有遇到任何以直截了当的方式给我的搜索.这适用于现有VSTO(C#)项目中的Excel 2010和VS 2010.
我有一个Excel工作表,其中包含4列数据,我想将其用作DataGridView的源.有人可以提供C#代码片段,以便(1)从特定工作表中获取数据并用它填充自定义对象吗?(2)将对象(如IEnumerable列表)绑定到Datagridview,以及(3)用于更新和删除功能的一些片段,这些片段将是网格固有的并反馈到源工作表.
我知道我在这里要求很多,但是很多VSTO信息似乎都被拆开了,并不总是很容易找到.谢谢!
我有一个Excel工作簿,它向数据库发出三个查询以填充隐藏工作表上的三个表,然后运行三个"刷新"脚本将这些数据拉到三个可见的演示文稿表(每个查询一个).同步运行它非常慢:刷新的总时间是三个查询中每个查询的时间总和加上每个"刷新"脚本运行的时间总和.
我知道VBA不是多线程的,但我认为可以通过异步触发查询来加快速度(从而允许在执行时完成一些清理工作),并且然后在数据返回时为每个工作表执行填充/刷新工作.
我重写了我的脚本如下(请注意,我必须删除连接字符串,查询字符串等,并使变量通用):
Private WithEvents cnA As ADODB.Connection
Private WithEvents cnB As ADODB.Connection
Private WithEvents cnC As ADODB.Connection
Private Sub StartingPoint()
'For brevity, only listing set-up of cnA here. You can assume identical
'set-up for cnB and cnC
Set cnA = New ADODB.Connection
Dim connectionString As String: connectionString = "<my conn string>"
cnA.connectionString = connectionString
Debug.Print "Firing cnA query: " & Now
cnA.Open
cnA.Execute "<select query>", adAsyncExecute 'takes roughly 5 seconds to execute
Debug.Print "Firing cnB query: " & Now …Run Code Online (Sandbox Code Playgroud)