小编ARi*_*ich的帖子

VBA 在 OSX 上获取用户名(或 Mac 替代环境(“用户名”))

我的任务是创建一个安全的(Windows 版本)Excel 工作簿,该工作簿使用宏来验证用户是否有权查看内容。在 Excel 2010 for Windows 中,我使用该Environ("username")函数来完成此操作。

我遇到的问题是组织中的一些用户使用 Mac 来完成日常工作,而Environ不能使用 OSX。

有谁知道找到 Mac 用户名的另一种方法?我在网上查过,但我能找到的只是如何找到计算机的唯一标识符,而不是用户名。

我试图用 Mac 做的事情甚至可能吗?

任何信息表示赞赏!

macos excel vba excel-2010

6
推荐指数
2
解决办法
8241
查看次数

VBA与网页上的单选按钮交互

编辑:几个月后,我再次尝试使用我第一次尝试的相同语法(在下面发布).出于某种原因,它奏效了!也许除了我的语法之外的其他东西导致无效...结束编辑

我一直在搜索论坛几个小时,现在试图找到解决这个问题的方法,但我没有尝试过任何工作.

我正在使用VBA自动化在SurveyMonkey上创建调查的过程.到目前为止,我已经能够:

  • 登录我的帐户,
  • 单击几个超链接以创建新的响应收集器,
  • 命名收藏家,
  • 转到收集器设置,
  • 并选择四个单选按钮中的三个来更改收集器设置.

问题不在于我无法选择单选按钮; 我的代码选择前三个按钮就好了.令我困惑的是,第四个按钮不会改变!我对每个按钮使用相同的过程,所以我无法弄清楚为什么最后一个按钮不会选择.

这是我的代码部分:

objIE.Document.getElementById("rdlResponseType_1").Click    'Allow multiple responses = Yes
objIE.Document.getElementById("rdlResponseEdit_1").Click    'Allow Responses to be Edited = Yes
objIE.Document.getElementById("rdlThankyou_1").Click        'Display a "Thank You" page? = Yes
objIE.Document.getElementById("rdlCompleteOpt_1").Click     'Survey Completion = Close Window
Run Code Online (Sandbox Code Playgroud)

这是单选按钮的HTML:

<table border="0" cellpadding="0" cellspacing="0" style="width: 100%;">
                        <tr id="CompleteOptDesc">
            <td style="">&nbsp;</td>
            <td>After the respondent leaves the survey:</td>
        </tr>

                        <tr id="CompleteOptItems">
            <td style="">&nbsp;</td>
            <td align="left" nowrap="nowrap" valign="top">
                                <table id="rdlCompleteOpt" class="Clean radioList" OnClick="radioToggle('rdlCompleteOpt', '0', 'panLink');" name="rdlCompleteOpt" border="0" style="white-space: nowrap">
                <tr>
                    <td><span style="white-space: nowrap"><input …
Run Code Online (Sandbox Code Playgroud)

html excel internet-explorer vba radio-button

5
推荐指数
1
解决办法
6318
查看次数

在没有模块级变量的情况下使功能区控制无效

我开发了一个包含自定义功能区的 Excel 加载项。我希望能够在某些情况下使功能区上的控件无效(启用/禁用),但是我能找到的每个示例都使用模块级或全局变量在首次加载功能区时存储功能区对象。这似乎是一个很好的方法,但是,正如这里列出的那样,有些情况下变量可以为空。

所以我想知道,是否有不同的方法来实现在 Excel 功能区中启用/禁用控件的结果,而不使用变量来存储功能区对象,甚至根本不使用 invalidate 方法?

excel vba ribbon ms-office excel-2013

4
推荐指数
1
解决办法
1547
查看次数

使用变量的多标准VBA自动过滤器

编辑:要解决这个问题,我换Dim Placed As RangeAs Long.然后我改变了

Set Placed = Rows("3:3").Find("Placed", Range("A3"), searchdirection:=xlToRight)
Run Code Online (Sandbox Code Playgroud)

Placed = Rows("3:3").Find("Placed", Range("A3"), searchdirection:=xlToRight).Column
Run Code Online (Sandbox Code Playgroud)

代码现在运行得很好.结束编辑

好的,我已经在这个问题上工作了近两个小时了.

我正在尝试在工作表上编写几个选项按钮来根据需要过滤数据.

首先,我记录了自己过滤数据给我一个起点.这是录音机吐出的内容:

ActiveSheet.Range("$A$3:$CS$212").AutoFilter Field:=53, Criteria1:=Array( _
    "Iteration 1", "Iteration 2", "Iteration 3", "Tradeshow", "="), Operator:= _
    xlFilterValues
Run Code Online (Sandbox Code Playgroud)

为了使选项按钮更加健壮,我决定使用变量,以防添加了列或行,或者添加了标准.

我加了一个可变的Range(),Field:=以及Criteria1:=,但我的代码现在抛出这个错误:Run-time error '1004': Autofilter Method of Range class failed.

我想知道我是否使用Array不当......?无论如何,这是我的声明:

Const Opt1 As String = "Iteration 1"
Const Opt2 As String = "Iteration 2"
Const Opt3 As String = …
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba excel-2010

3
推荐指数
1
解决办法
5万
查看次数

使用VBA仅获取文件名/文件路径的一部分

我不确定如何解决这个问题.我做了很多研究,但我找到的大部分答案都与我需要的有些不同.

我想要完成的是:

  1. 手动打开现有工作簿(wbAI),
  2. 启动宏,
  3. 使用msoFileDialogOpen查找并打开文件(调用此wb2),
  4. 存储部分 WB2的文件名(没有在文件名的日期)作为变量或字符串.(我不确定哪个更好用于此目的.也许我不需要存储它...),
  5. 将wb2文件名(日期)的一部分粘贴到wb1中的某个单元格中,
  6. 从wb2复制必要的数据,
  7. 将数据粘贴到wb1中,
  8. 格式化数据,
  9. 对粘贴的数据使用VLOOKUP,
  10. 关闭wb2而不保存
  11. 结束宏.

我的宏可以完成上面列出的每一步,除了第四和第五.一方面,我想知道我是如何追求这一点的,另一方面,我想知道它在我当前的代码中的位置.

为了举例说明我正在谈论的内容:让我们说在第三步中我打开一个名为"01.31.13 Group Names"的工作簿.并且文件路径来自Sharepoint站点,因此它看起来像这样:

" https://company.com/team/teamone/_layouts/xlviewer.aspx?01.31.13%20Group%20Names%20.xlsm&Source=https ......."

如何只选择文件名/文件路径中的日期?

这是我的代码的开头:

Sub Test()

Dim lastRow As Long, i As Long
Dim ws As Worksheet
Dim wbSource As Workbook
Dim wbAI As Workbook
Dim vrtSelectedItem As Variant

Set wbAI = ActiveWorkbook
Application.ScreenUpdating = False 

With Application.FileDialog(msoFileDialogOpen)
    .InitialFileName = https://company.com/team/teamone & "\"
    .AllowMultiSelect = False
    .Show
    '  ******  Is this where the new code could be inserted? *******
   For …
Run Code Online (Sandbox Code Playgroud)

excel filenames vba excel-vba

2
推荐指数
1
解决办法
7143
查看次数

VBA另存为方法

浏览论坛一个多小时后,我似乎无法弄清楚为什么我的另存为代码不起作用。

我的目标是在不同的文件类型下保存工作簿的新副本。(当前文件类型是 .csv。)我不想保存在新的或不同的位置,当前目录是我想要保存到的位置。

我已经尝试了比我记得的更多的以下代码的变体,所以我将发布我当前的语法:

CurrentDir = CurDir()

dateVal = Date

ActiveWorkbook.SaveAs Filename:="" & CurrentDir & "ALS Week of " & dateVal - 4 & ".xlsx", FileFormat:=51

我已经查看了如何打开一个对话框的示例,用户可以在其中输入信息以进行保存。但我希望采取一种不干涉的方法。如果有人能看到我的错误所在,请告诉我!

编辑: 我得到的错误是"Method 'SaveAs' of object '_Workbook' failed

excel vba save

1
推荐指数
1
解决办法
3003
查看次数

VBA更有效的“清除切片器”代码

我在Excel 2010的摘要表中使用了六个切片器。每个切片器都连接到26个数据透视表。

我过去使用下面的代码来清除切片器的选择,并且在最小延迟的情况下工作得很好。但是,这次代码需要6到7秒钟才能完全执行,这似乎不值得该功能。

Dim oSlicerC As SlicerCache

For Each oSlicerC In ActiveWorkbook.SlicerCaches
    oSlicerC.ClearManualFilter
Next oSlicerC
Run Code Online (Sandbox Code Playgroud)

我一直在寻找一种加速宏/使其更有效的方法,但是我在网上找不到任何东西。我尝试设置ScreenUpdatingDisplayAlertsEnableEventsFalse然后在代码开头尝试设置CalculationxlCalculationManual,但这并没有太大帮助。

我曾考虑过遍历每个对象SlicerItem以取消选择每个对象,但是在几个切片器中最多包含100个项目,我不确定这会更快。

是否有人对我如何能够做到这一点有任何想法?我不是在寻找代码,因为我想自己尝试一下,但是我不确定应该走哪条路,或者是否有比我已经在使用的方法更有效的选择。非常感谢!

excel vba pivot-table excel-vba

0
推荐指数
1
解决办法
2万
查看次数

使用vba excel查找最后一个单元格地址

我搜索过这个网站,似乎所有的答案都只是指向找到单元格的行号.

我试图设置一个范围,以便它将从列A1到数据的末尾A.此电子表格将每周更新,以便每周都会添加数据.

我想知道什么代码可以工作,以便我可以找到行号并以某种方式将其与我的范围代码绑定,以便它将相等"A" + lastrownumber?或者,如果有代码将列和行号一起提供?如果我错过了正确答案的链接,也会有一个简单的链接,我为帖子和你的时间道歉.

这是我的代码:

Sub NamedRange()

Dim Rng1 As Range
Dim newDate As Integer
Dim NumberOfRows As Range


Dim MyRange As Range
Dim lastRow2 As Range


lastRow2 = Range("A65536").End(xlUp).Row
'lastRow2 = LastRow

Set Rng1 = Sheets("Sheet1").Range(lastRow2)
ActiveWorkbook.Names.Add Name:="MyRange", RefersTo:=Rng1


Dim date1 As String
Dim dat As Date
Dim newPrice As Double


Set RgSales = Range("MyRange")
Run Code Online (Sandbox Code Playgroud)

excel vba

-2
推荐指数
1
解决办法
4万
查看次数