繁体   English   中英

在VB.Net中创建一个对象以在VBA中使用

[英]Create an object in VB.Net to use in VBA

首先,我对此很陌生,所以要保持温柔!

我正在尝试在VB.net中创建一个类/对象以在vba中使用。 我从这篇文章的底部使用了Gary Whitcher的代码:

样本vb.net代码将文件上传到Amazon S3存储

我在Visual Studio中创建了一个类,并设法使其输出一个TLB文件,该文件可以导入到Excel中的VBA。

然后,我可以在VBA中使用该对象在S3存储系统中创建一个新文件夹,但是在使用“ AddFileToFolder”方法时遇到了问题。

我必须稍微编辑Gary的代码才能在VS中进行编译,编辑后的版本如下。

Imports Amazon.S3
Imports Amazon.S3.Model
Imports Amazon
Imports Amazon.S3.Util
Imports System.Collections.ObjectModel
Imports System.IO

Public Class aws_s3

Const AWS_ACCESS_KEY As String = "AccessKey" 'is set to MY actual key
Const AWS_SECRET_KEY As String = "SecretKey" 'is set to MY actual key


Private Property s3Client As IAmazonS3

Sub New()
    Try
        s3Client = New AmazonS3Client(AWS_ACCESS_KEY, AWS_SECRET_KEY, RegionEndpoint.USEast1)
    Catch ex As Exception

    End Try

End Sub


Public Function CreateFolder(bucketName As String, folderName() As String) As String
    Dim returnval As String = ""
    Try
        Try
            Dim folderKey As String = ""
            If Not AmazonS3Util.DoesS3BucketExist(s3Client, bucketName) Then
                returnval = "Bucket does not exist"
            Else
                For i = 0 To folderName.Length - 1
                    folderKey += folderName(i) & "/"

                Next
                ' folderKey = folderKey & "/"    'end the folder name with "/"
                Dim request As PutObjectRequest = New PutObjectRequest()
                request.BucketName = bucketName
                request.StorageClass = S3StorageClass.Standard
                request.ServerSideEncryptionMethod = ServerSideEncryptionMethod.None
                ' request.CannedACL = S3CannedACL.BucketOwnerFullControl
                request.Key = folderKey
                request.ContentBody = String.Empty
                s3Client.PutObject(request)
            End If
        Catch ex As Exception
            returnval = ex.Message
        End Try
    Catch ex As AmazonS3Exception
        returnval = ex.Message
    End Try
    Return returnval
End Function
Public Function AddFileToFolder(FileName As String, bucketName As String, folderName As String) As String
    Dim returnval As String = ""
    Try
        Try
            If Not AmazonS3Util.DoesS3BucketExist(s3Client, bucketName) Then
                Dim fname() As String = folderName.Split("/")
                CreateFolder(bucketName, fname)
            Else
                Dim path As String = FileName
                Dim file As FileInfo = New FileInfo(path)

                Dim key As String = String.Format("{0}/{1}", folderName, file.Name)
                Dim por As PutObjectRequest = New PutObjectRequest()
                por.BucketName = bucketName
                por.StorageClass = S3StorageClass.Standard
                por.ServerSideEncryptionMethod = ServerSideEncryptionMethod.None
                por.CannedACL = S3CannedACL.PublicRead
                por.Key = key
                por.InputStream = file.OpenRead()
                s3Client.PutObject(por)
            End If
        Catch ex As Exception
            returnval = ex.Message
        End Try
    Catch ex As AmazonS3Exception
        returnval = ex.Message
    End Try
    Return returnval & " dll"
End Function

末级

使用VBA,我已经创建了上面的对象,并且可以成功执行CreateFolder,但是执行addfiletofolder时出现错误“类不支持自动化或不支持预期的接口”

VBA代码如下所示:

Dim aws As AWS_S3
Dim Result As String
Dim UploadFile As String

UploadFile = "C:\Zipped Builds\Hinchley Legion.zip"

Set aws = New AWS_S3

Dim fld(1) As String
fld(0) = "folder"
fld(1) = "subfolder"

Result = aws.CreateFolder("nsmcustomercontent", fld)

If Result <> "" Then GoTo errHandle

Result = aws.AddFileToFolder(UploadFile, "nsmcustomercontent", fld)

If Result <> "" Then GoTo errHandle

Exit Sub

errHandle:
    MsgBox Result


End Sub

我从CreateFolder可以正常工作,但AddFileToFolder不能正常工作的事实中猜测,在VS中创建的类中存在问题,缺少依赖项或其他原因吗?

谢谢Anu6is,这确实是问题所在。 该类的作者为用法写了以下内容,这使我不满意:

将文件添加到文件夹

            Dim fld(1) As String                 
            fld(0) = <foldername>
            fld(1) = <subfoldername>
            'List each sub folder as an element in array
            Dim rtrn As String = aws.AddFileToFolder(<local file name>,<bucketname>, fld)

我认为我需要更好地阅读VB.Net! 非常感谢您的快速回复,非常感谢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM