的Visual Studio 2015年是给我的错误,指出"命名空间或进口'的Microsoft.Office.Interop.Excel’指定的类型不包含任何公共成员或无法找到." 我从2013年升级到Office 2016后才开始出现此错误.
我的"参考"部分中没有.NET选项卡来添加此引用.MSDN只给我一个选项来下载Visual Studio 2013的主Interop程序集,它并没有解决我的问题.我仍然没有看到.NET选项卡.
如何修复这些参考错误?
是否有用于在平板电脑上运行的Excel 2016中捕获屏幕手势或屏幕滑动的代码?我正在寻找可以通过屏幕滑动或屏幕手势控制的代码.例如,屏幕左侧滑动选择不同的选项卡或运行代码等.?? 尝试在平板电脑上模拟excel 2016中的平板电脑行为.
看看这个属性(假设您在第一个工作表上有一个表):
Application.Sheets(1).ListObjects(1).name
Run Code Online (Sandbox Code Playgroud)
这个属性包含多少个字符?好吧,在测试了几个字符串后,我得出的结论是255,任何超过255个字符的字符串都会导致抛出错误:
运行时错误5 - 无效的过程调用或争论
看看这个属性:
Application.Sheets(1).ListObjects(1).Summary
Run Code Online (Sandbox Code Playgroud)
这个属性包含多少个字符?再次,测试几个字符串,你会得到一个大约50,000的数字,你设置它更高,你得到相同的错误,除了在这种情况下,excel有时会崩溃或吐出一个不同的错误(多次尝试后):
Dim i As Integer
Dim a As String
For i = 1 To 5001
a = a & "abcdefghih"
Next i
Application.Sheets(1).ListObjects(1).Summary = a
Run Code Online (Sandbox Code Playgroud)
对象'ListObject'的方法"摘要"失败
这种"隐藏"字符的限制来了所有的地方(在这里,在这里,少在这里具体,所以这里典雅),它似乎并不像他们记录任何地方,例如看看网页对于ListObject.Name,它没有注明你可以在该变量中存储多少个字符...
那么有更好的方法来确定这个吗?您在属性中设置的字符串是否存储在某个固定长度的字符串中,可以访问该字符串以确定它们的最大长度,或者是否可以使用其他形式的文档来获取此信息?
在标准VBA对象中的大多数字符串上设置的这些字符限制很奇怪,我想知道它们的目的是什么,为什么设计者选择将"ListObjects.name"限制为255个字符以及这是否是任意默认限制或是否这是一个有意识的决定.我相信标准的字符串长度是这个,我想知道为什么偏离这个标准.
总结一下我在上面提出的观点并将这个问题浓缩成一句话:
有没有一种通用的方法来确定可以一个对象的属性中设置字符串的最大长度,而不首先给它另一个值,而忽略错误/检查字符截断测试该字符串的财产?
Excel 2016(16.0.6965.2076)
SQL Server 2014(12.0.4213.0)
我有一个包含10个参数的SSRS报告 - 其中两个是日期,另外8个是使用查询填充选项的文本下拉列表.如果我尝试将此报告提取到Excel中的Power Pivot数据模型(Power Pivot - > Manage - > From Other Sources - > Report),则在完成表导入向导时(成功指定报告和参数值并查看报告后)通过单击"选择表和视图"页面上的"完成"按钮,在向导中正确呈现我收到错误消息:
XML解析在第1345行第36列失败:非法的xml字符.
给出的行取决于我为报告指定的参数值,但列始终为36.我检查了我的报告,这些行号和列号似乎与我的报告无关,因为它们通常都大于报告中返回的总行数/列数.
我在网上查了一下,发现了一些处理这个问题的资源,但我一直无法找到解决问题的方法:
此博客和此关联的Microsoft Connect故障单建议我可以通过将报表导出为数据馈送并在Power Pivot向导中引用它来实现此功能,但这对我来说也不起作用,我得到了不同的错误:
无法获取数据Feed"[报告Feed名称]"的架构.请确保此Feed存在.
我在网上其他地方发现了这个后续错误(或原始问题)可能是由于报告URL太长(包括参数/值).不幸的是我看不到任何进一步的方法来减少URL长度(当前超过700个字符),因为我已经最小化了我的参数名称和报告名称,但仍然有这个问题(我不相信我可以减少参数值,因为它们是从我们无法更改的应用程序数据库中获取).
我也看到了用"指定值"参数替换我的"从查询中获取值"参数的建议,但这不可行,因为参数值必须从上面提到的应用程序数据库中获取并且会随着时间的推移而变化,因此需要被动态获取.
任何人都可以建议我可以为此问题采取解决方案或进一步的故障排除步骤
Excel文件包括部署在表(VBA列表对象)中的VBA编码的用户定义函数(UDF).现在,出于逃避我的原因,如果UDF模块包含在任何子函数或函数范围之外声明的Range变量,则在打开文件时会收到非常明显的警告:"自动错误 - 灾难性故障".
"灾难性"似乎是夸大其词,因为在警告被驳回后,文件似乎正常工作.但我仍然想了解问题所在.我已设法用MVC示例复制该问题,如下所示.我在Windows 10上运行Excel 2016(已更新).
有两个表(即VBA listobjects):表1列出了"项目"和表2中列出了"项目特征"(通过选择数据和点击生成两个表Table的上Insert标签).表2 ITEM_NAME()在字段Item_Name中调用了一个UDF ,它返回项目名称作为项目ID的函数,请参见屏幕截图:
该函数ITEM_NAME()本质上是常规工作表函数INDEX和MATCH的包装器,如下面的代码所示:
Option Explicit
Dim mrngItemNumber As Range
Dim mrngItemName As Range
Public Function ITEM_NAME(varItemNumber As Variant) As String
' Returns Item Name as a function of Item Number.
Set mrngItemNumber = Sheets(1).Range("A4:A6")
Set mrngItemName = Sheets(1).Range("B4:B6")
ITEM_NAME = Application.WorksheetFunction.Index(mrngItemName, _
Application.WorksheetFunction.Match(varItemNumber, mrngItemNumber))
End Function
Run Code Online (Sandbox Code Playgroud)
因此,重复一下,使用此设置,我会在打开文件时收到Automation错误.但是,当我执行以下任何操作时,错误消失:
将声明移动到函数的范围内.这个解决方案没有吸引力,因为它需要更多的代码行,每个UDF对应一行,并且有许多代码.
将变量类型从Range更改为其他内容,例如Integer(因此该函数显然不起作用).
将表2转换为普通范围(即删除表).这也是一个不方便的解决方案,因为我真的想在我的代码中将Table功能用于其他目的.
ITEM_NAME() …
我已经构建了一个excel插件,用数据库中的数据填充工作表.我还添加了一些样式并使用FreezePanes锁定一些行和列.
worksheet.Activate();
worksheet.Application.ActiveWindow.FreezePanes = false;
worksheet.Application.ActiveWindow.SplitRow = 4;
worksheet.Application.ActiveWindow.SplitColumn = 11;
worksheet.Application.ActiveWindow.FreezePanes = true;
Run Code Online (Sandbox Code Playgroud)
这一切都像excel 2010/2013中的魅力一样,但我最近切换到excel 2016(办公室365),从那时起,当我的excel工作表不在前台时,我遇到了FreezePanes的问题.我搜索了互联网,我遇到的唯一事情就是我只能在活动表上预制FreezePanes,我知道 - 我已经在设置FreezePanes之前激活了表单.这在excel 2010中有效,尽管物理上我的excel没有被发送到前台.
来自办公室365的Excel可能真的希望我的excel工作表在物理上处于前台但worksheet.Activate()没有帮助,我也尝试了以下代码:
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll", SetLastError = true)]
static extern System.IntPtr FindWindow(string lpClassName, string lpWindowName);
string caption = oExcel.Caption;
IntPtr handler = FindWindow(null, caption);
SetForegroundWindow(handler);
Run Code Online (Sandbox Code Playgroud)
但这也行不通.任何人都可以帮我这个吗?
需要说明的是:我的excel版本是2016版本1611(Build 7571.2109)
我有以下代码打开一个表单,然后做一些事情.
Sub lag_ny_a3()
Dim frm As ufNyA3
Set frm = New ufNyA3
frm.Show
If Not frm Is Nothing Then
MsgBox("Doing stuff")
Unload frm
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
然后我在表单中有以下代码
Private Sub cmdAvbryt_Click()
Unload Me
End Sub
Run Code Online (Sandbox Code Playgroud)
但是,即使在表单中单击了cmdAvbryt按钮,第一个代码片段也会输入if语句,就好像表单没有被卸载一样.为什么会这样,如果按下cmdAvbryt按钮,如何防止if语句中的代码被执行?
我正在调试我在 Excel 2016 中编写的一些 VBA 代码,该子程序使 Windows Server 上的 Excel 2016 崩溃,没有错误。
它正在崩溃Set RegObj = GetObject...
Sub TestPrinter()
On Error GoTo e
Dim RegObj As Object
'This next line is where the crash occurs...
Set RegObj = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
Exit Sub
e:
MsgBox "Error number " & Err & " in TestPrinter" & vbCrLf & "Error: " & Error$(Err)
End Sub
Run Code Online (Sandbox Code Playgroud)
我的最终目标是枚举计算机上连接的打印机,然后Application.ActivePrinter根据我从注册表中提取的字符串进行设置。这段代码在我尝试过的所有其他机器上都运行良好 - 但在这台服务器上失败了。
我该如何调试这个?错误处理程序永远不会被命中。
我正在使用 JavaScript API 开发 Excel 加载项以在 Excel 2016 中构建加载项。
我遇到的问题不是将 url/link 放在单元格中 - 我宁愿让这个 url 可点击(你可能知道它是通过在单元格中输入一个 url 并点击 )。
在 VBA 中,解决方案是这样的(例如):
With Worksheets(1)
.Hyperlinks.Add .Range("E5"), "http://example.microsoft.com"
End With
Run Code Online (Sandbox Code Playgroud)
不幸的是,我在 JavaScript API 中找不到超链接函数。任何的想法?
非常感谢您的帮助和最好的问候埃里克
excel-2016 ×10
excel ×8
vba ×5
excel-vba ×4
office365 ×2
c# ×1
forms ×1
group-by ×1
javascript ×1
m ×1
office-2016 ×1
office-js ×1
powerpivot ×1
powerquery ×1
ssrs-2014 ×1
vb.net ×1
wmi ×1