小编Oda*_*lim的帖子

VBA密码保护

有没有办法保护VBA密码保护免受这样的破解:

有没有办法破解Excel VBA项目的密码?

或者这一个:

https://superuser.com/questions/807926/how-to-bypass-the-vba-project-password-from-excel

我真的需要加强我的VBA代码的安全性,因为它包含敏感的SQL数据!

谢谢

excel vba excel-vba

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

输出插入的 T-SQL

这可能是一个新手问题,但我非常不熟悉SQL Server 中的OUTPUT子句如何工作。INSERT

问题

我正在将值插入表中,并且我想为该操作生成一个唯一的 id。之前我使用以下代码来生成唯一的 id:

select top 1 id 
from [dbo].[TEP_Payments_Table] 
order by id desc + 1
Run Code Online (Sandbox Code Playgroud)

这样做的问题是,如果某些用户同时使用该表单,他们可能会拥有重复的 ID。

解决方案

经过大量研究,我发现Output Inserted这显然可以解决这个问题。

为此,我创建了下表:

  • TEP_ReceiptID- 其中列ReceiptID是 id col 和主键。

然后我尝试在我常用的插入语句中使用“输出插入”,代码:

INSERT INTO [dbo].[TEP_Payments_Table] ([col1], [col2]) 
VALUES
OUTPUT inserted.ID INTO dbo.TEP_ReceiptID
('testval1', 'testval2')
Run Code Online (Sandbox Code Playgroud)

令我失望的是,这不起作用。再次,我的错,因为我对此不熟悉Output语法。

如果您能告诉我哪里出了问题,我将不胜感激。

sql t-sql sql-server

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

跳过迭代 Google Apps 脚本

我在 Google Apps 脚本中有一个非常简单的 For 循环来检查 Google Sheet 中的一些条件。我想要的是添加另一个条件,如果满足,那么我想跳过当前迭代并继续下一个。这在 VBA 中很容易,但我不知道如何在 JavaScript 上做到这一点。

当前代码:

for (var i=1 ; i<=LR ; i++)
    {
     if (Val4 == "Yes")
      {
       // Skip current iteration...   <-- This is the bit I am not sure how to do
      }
     elseif (Val1 == "Accepted" && !(Val2 == "") && !(Val3 == ""))
      {
        // Do something..
       }
      else
      {
       // Do something else...
      }

    }
Run Code Online (Sandbox Code Playgroud)

javascript for-loop google-sheets google-apps-script

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

VBA公共字典 - 如何访问数据

我在Workbook_Open()上的VBA中设置一个公共字典.我想在电子表格中创建的任何模块中访问此词典中的项目.

我的代码ThisWorkbook是:

Option Explicit
Public Dic As Scripting.Dictionary

Private Sub Workbook_Open()
    Set Dic = New Scripting.Dictionary
    Dic.Add Key:="cat", item:="Database"
    Dic.Add Key:="pwd", item:="Password"
    Dic.Add Key:="col", item:="Server"  
End Sub
Run Code Online (Sandbox Code Playgroud)

当我转到任何模块并使用该msgbox函数调用项目时,它不起作用:

MsgBox (Dic("col"))
Run Code Online (Sandbox Code Playgroud)

任何提示请如何使这项工作?

我们的想法是在电子表格的开头设置这个字典,并且在任何后续模块中都需要访问它.

干杯

excel vba excel-vba

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

从另一个模块调用专用子

我有两个模块,Module1和Module2。

在第1单元中:

Private Function myCheck() As Boolean

if [Operation] = [Something] then

myCheck = True
Else
myCheck = False
End if

End Sub
Run Code Online (Sandbox Code Playgroud)

在Module2中,我想在模块1中运行myCheck子,然后执行另一项操作:

Private Sub Execute()

[Operation 1]

If myCheck = True Then

[Operation 2]
Else
[Operation 3]

End If
End Sub
Run Code Online (Sandbox Code Playgroud)

这是行不通的。如果我将私有功能myCheck放在同一模块中,那么它将起作用。是否有一种特殊的方法可以从另一个模块调用子或函数?

excel vba excel-vba

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

Adodb 提交和回滚 Excel VBA

继续我之前的问题。经过大量研究,我发现将数据从 Excel 插入 SQL Server 的方法是最有效的,代码如下。

我真正想要建议的是如何设置 ADODB 提交和回滚。我不确定这是否可能,因为我的代码通过 FOR 循环将数据插入 SQL Server,并且我认为提交和回滚需要在一次 SQL 执行中完成?

代码

Pre-loop code
            For i = 7 To LastRow

            'Check if it was sent - then skip iteration
                    With Worksheets("Admin")
                        If .Cells(i, 5).Value = "Y" Then
                            GoTo NextIteration
                        Else
                            Command.CommandText = "INSERT INTO [dbo].[TEP_Payments_Table] ([AA Number], [AA Name], [AA Role], [Project Name], [Series], [Paper No], [Task Name], [Amount], [Payment Justification], [Payment Identifier], [Date of Activity], [Half Day / Full Day], [Teacher Release (Y/N)], [Centre No], …
Run Code Online (Sandbox Code Playgroud)

excel vba

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

VBA isString 与 isNumeric

我正在验证 Excel 中 VB 用户窗体中某些文本框中的数据。

数据可以是长度为 6 位的数字、长度至少为 3 个字符的字符串或字符串和数字的组合。

为此,我写道:

If Len(Trim(Me.TextBox1)) = 6 And IsNumeric(Trim(Me.TextBox1)) Then
  (do operation)
Elseif Len(Trim(Me.TextBox1)) > 2 and IsString(Trim(Me.TextBox1)) Then
  (do another operation)
Else
  (do third operation)
End if
Run Code Online (Sandbox Code Playgroud)

我可以让它工作isNumeric,但似乎 VBA 不支持isString.

有没有巧妙的解决方法来解决这个问题?

excel vba

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

SQL Server前导零

我需要将所有月份转换为2位数字,如下所示:

1,2,3,4,5,6,7,8,9,10,11,12
Run Code Online (Sandbox Code Playgroud)

对此:

01,02,03,04,05,06,07,08,09,10,11,12
Run Code Online (Sandbox Code Playgroud)

所以我把一个简单的CASE语句放在一起检查月份的长度值是否为1,然后添加一个前导零,否则保持原样:

SELECT 
    CASE 
       WHEN LEN(MONTH(GETDATE())) = 1 
          THEN RIGHT('0' + CONVERT(VARCHAR(2), MONTH(GETDATE())), 2) 
          ELSE MONTH(GETDATE()) 
    END
Run Code Online (Sandbox Code Playgroud)

我们在四月,这次行动的结果是'4',而不是'04'.检查语句时(没有条件语句):

right('0' + convert(varchar(2),month(getdate())),2)
Run Code Online (Sandbox Code Playgroud)

然后我得到正确的答案('04')....

这让我大吃一惊..我已经在这一整天了,我无法弄清楚为什么代码单独工作,但是在CASE语句中包含失败.

请帮忙!

t-sql sql-server

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

编译错误:未定义变量(VB Adodb)

我有一个代码,昨天运行得非常好,但现在它停止工作并抛出此错误:

在此输入图像描述

我检查了我的引用,并检查了我的activeX框:

在此输入图像描述

我真的被卡住了.我究竟做错了什么?我需要更新一些东西吗?

excel vba excel-vba

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

VBA加密方法

我在VBA上编写了一个非常简单的Ceaser Cipher加密算法.它需要一个字符串值并应用x shift.

很高兴.但是,想把它带到下一步,但我不确定它是否可行.

我想在另一个模块中调用此加密函数并传递字符串值以进行加密.

即我想要做的是这样的事情

Private Sub Encryption()
   'Encryption method of string Var
End Sub
Run Code Online (Sandbox Code Playgroud)

----并在另一个子----

Private Sub function()
   Dim Text as String
   Text = "Hello"
   Encryption(Text)
End Sub
Run Code Online (Sandbox Code Playgroud)

所以在这个例子中,我已经定义了一个加密任何字符串变量的方法.在另一个函数中,我定义了一个字符串并将其初始化为"Hello".然后在它上面调用加密功能......不确定这在VBA中是否可行?

当我在函数中调用函数时,我不确定如何传入变量.有什么建议吗?

vba excel-vba

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

简单的 For 循环 Google Apps 脚本

我正在尝试在 Google Apps 脚本中编写一个非常基本的 For 循环,它确实应该运行得很快。但是,当我执行它时,需要很长时间才能运行,直到出现运行时间太长的错误(错误:超出最大执行时间)。

代码是:

function myFunction() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var Sheet = ss.getActiveSheet();
  var LR = Sheet.getLastRow()

  for(var i=1;i=10;i++)

  {
   Logger.log(i);
  }

}
Run Code Online (Sandbox Code Playgroud)

难道我做错了什么?还是我的 Google Apps 脚本搞砸了?

google-sheets google-apps-script

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